package ar.com.nexttome;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;

import android.annotation.SuppressLint;
import ar.com.nexttome.entities.Mensaje;
import ar.com.nexttome.entities.Persona;
import ar.com.nexttome.util.Constantes;
import ar.com.nexttome.util.HTTPClient;

@SuppressLint("ParserError")
public class PersonaManager {

	public static List<Persona> getPersonas(String id) {
		List<Persona> listPersonas = null;
		JSONObject json;

		try {
			json = HTTPClient.getJSON(Constantes.SERVER_URL + Constantes.PERSONAS_CERCANAS + "?id=" + id);

			if (json != null) {
				listPersonas = new ArrayList<Persona>();
				JSONArray arrayPersonas = json.getJSONArray("personas");

				for (int i = 0; i < arrayPersonas.length(); i++) {
					JSONObject persona = arrayPersonas.getJSONObject(i);
					Persona p = new Persona();
					p.setNick(persona.getString("nick"));
					p.setLatitud(persona.getDouble("lat"));
					p.setLongitud(persona.getDouble("lon"));
					p.setSexo(persona.getString("sexo"));
					p.setId(persona.getString("id"));
					p.setDistancia(persona.getInt("distancia"));
					p.setComentario(persona.getString("comentario"));
					listPersonas.add(p);
				}
			}

		} catch (Exception e) {
			System.out.println(e.getStackTrace());
		}

		return listPersonas;
	}

	public static Persona getPerfil(String id) {
		JSONObject persona = null;
		JSONObject json;

		try {
			json = HTTPClient.getJSON(Constantes.SERVER_URL + Constantes.GET_PERFIL + "?id=" + id);
			persona = json.getJSONArray("persona").getJSONObject(0);
			
			if (persona != null) {
				Persona p = new Persona();
				p.setNick(persona.getString("nick"));
				p.setLatitud(persona.getDouble("lat"));
				p.setLongitud(persona.getDouble("lon"));
				p.setSexo(persona.getString("sexo"));
				p.setId(persona.getString("id"));
				p.setComentario(persona.getString("comentario"));
				p.setDistancia(0);

				return p;
			} 
			
		} catch (Exception e) {
			System.out.println(e.getStackTrace());
		}
		
		return null;
	}

	public static List<Mensaje> getMensajes(String id) {
		List<Mensaje> listMensajes = null;
		JSONObject json;

		try {
			json = HTTPClient.getJSON(Constantes.SERVER_URL + Constantes.GET_MSG + "?id=" + id);

			if (json != null) {
				listMensajes = new ArrayList<Mensaje>();
				JSONArray arrayMensajes = json.getJSONArray("mensaje");

				for (int i = 0; i < arrayMensajes.length(); i++) {
					JSONObject mensaje = arrayMensajes.getJSONObject(i);
					Mensaje m = new Mensaje();
					m.setFrom(mensaje.getString("de"));
					m.setMsg(mensaje.getString("msg"));
					m.setFromId(mensaje.getString("deid"));
					listMensajes.add(m);
				}
			}

		} catch (Exception e) {
			System.out.println(e.getStackTrace());
		}

		return listMensajes;
	}

	public static void guardarPerfil(Persona persona) throws ClientProtocolException, IOException {
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

		nameValuePairs.add(new BasicNameValuePair("id", persona.getId()));
		nameValuePairs.add(new BasicNameValuePair("foto", persona.getFoto()));
		nameValuePairs.add(new BasicNameValuePair("nick", persona.getNick()));
		nameValuePairs.add(new BasicNameValuePair("sexo", persona.getSexo()));
		nameValuePairs.add(new BasicNameValuePair("comentario", persona.getComentario()));
		nameValuePairs.add(new BasicNameValuePair("lat", Double.toString(persona.getLatitud())));
		nameValuePairs.add(new BasicNameValuePair("lon", Double.toString(persona.getLongitud())));

		HTTPClient.doPost(Constantes.PUT_PERFIL, nameValuePairs);
	}

	public static void mandarMensaje(Mensaje msg) throws ClientProtocolException, IOException {
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

		nameValuePairs.add(new BasicNameValuePair("from", msg.getFrom()));
		nameValuePairs.add(new BasicNameValuePair("to", msg.getTo()));
		nameValuePairs.add(new BasicNameValuePair("msg", msg.getMsg()));

		HTTPClient.doPost(Constantes.PUT_MSG, nameValuePairs);
	}
}
